<?
/**
 * ============================================================================
 * * 版权所有 2013-2017 xtoyun.net，并保留所有权利。
 * 网站地址: http://www.xtoyun.net；
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和
 * 使用；不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * $Author: xtoyun $ 
*/
namespace xto\template;


use xto\App;
use xto\membership\context\Context;
use xto\membership\context\Users;
use xto\module\IModule;
use xto\template\Template;
use xto\data\service\ConfigService;
use think\Controller;
use think\Request;

class TemplateController extends Controller{
	private $app;
	private $context;
    private $template;
    private $module;
    private $m;
    private $c;
    private $a;
    protected $config; 

    public function _initialize(){
        parent::_initialize();
        $request=Request::instance();

        $this->app=App::instance(); 
        $this->template=Template::current();//当前模块模板

        $this->m=$request->module();
        $this->c=$request->controller();
        $this->a=$request->action();
        
        $this->module=IModule::current(); //当前模块信息
        $this->context=Context::current();//页面上下文信息
        $this->config=ConfigService::getConfigs(true);
        
        $this->assign('m',strtolower($this->m));
        $this->assign('c',strtolower($this->c));
        $this->assign('a',strtolower($this->a));
 
        $this->assign('viewurl',$this->module->viewurl);//当前模块首页 
        $this->assign('layout',$this->layout);//指定母版页面    

        $this->assign('menus',$this->module->menus);//默认模块菜单
        $this->assign('config',$this->config);//配置当前站点信息
        $this->assign('modules',$this->module->modules());//当前所有模块
    }

    /**
     * 查找配置信息，例:find('app_name')
     * @access public
     * @return string
     */
    public function find($name){
        return ConfigService::getconfig($name); 
    }

    /**
     * 默认全局母板页
     * @access public
     * @return string
     */
    public function getlayout(){
        return APP_PATH."common/view/$this->theme/template/layout.html";
    }

    /**
     * 默认表单模板页
     * @access public
     * @return string
     */
    public function getFormLayout(){
        return APP_PATH."common/view/$this->theme/template/form.html";
    }

    /**
     * 默认表格模板页
     * @access public
     * @return string
     */
    public function getTableLayout(){
        return APP_PATH."common/view/$this->theme/template/table.html";
    }

    /**
     * 全局皮肤请在模块根目录template.php重写getTheme方法即可，不同模块读取不同皮肤
     * 如果只是修改tableTemplate,在此类重写getTemplateLayout方法
     * @access public
     * @return string
     */
    public function getTheme(){
        return $this->template->theme;
    }

    /**
     * 检查权限
     * @access public
     * @return 直接输入错误提示
     */
    public function checkfun($funid){ 
        if(!Users::checkfun($funid)){
            $this->error("权限不够");
            return;
        }
    } 

    /**
     * 获取当前模板类
     * @access public
     * @return Template
     */
    public function getTemplate(){
        return $this->template;
    }

    /**
     * 获取当前模块类
     * @access public
     * @return Module
     */
    public function getModule(){
        return $this->module;
    }

    /**
     * 获取模块配置类
     * @access public
     * @return Module
     */
    public function getConfig(){
        return $this->module->config;
    }

    /**
     * 获取全局类
     * @access public
     * @return Module
     */
	public function getApp(){
		return $this->app;
	}

    /**
     * 获取用户上下文信息，指登录后用户名，用户等
     * @access public
     * @return Module
     */
	public function getContext(){
		return $this->context;
	}

	public function __get($name)              // 这里$name是属性名
    {
        $getter = 'get' . $name;              // getter函数的函数名
        if (method_exists($this, $getter)) {
            return $this->$getter();          // 调用了getter函数
        } else {
            if(isset($this->$name)){
                return $this->$name; 
            } 
        }
    }

    public function __set($name, $value)
    {
        $setter = 'set' . $name;             // setter函数的函数名
        if (method_exists($this, $setter)) {
            $this->$setter($value);          // 调用setter函数
        } else {
            if(isset($this->$name)){
                $this->$name = $value; 
            } 
        }
    }
}